import logging
import logging.handlers
import os
import time

def init_log_config(filename, when = 'midnight', interval = 1, backup_count = 7, level=logging.DEBUG):
    """
        功能：初始化日志配置函数
        :param level: 日志级别（默认 DEBUG）
        :param filename: 日志文件名
        :param when: 设定日志切分的间隔时间单位
        :param interval: 间隔时间单位的个数，指等待多少个 when 后继续进行日志记录
        :param backup_count: 保留日志文件的个数
        :return:
    """
    # 1.创建日志器对象
    # 参数用来为了__name__ 是当前模块的名字（如 my_module）
    # 这样做可以让每个模块都有一个唯一的 logger 名字
    # 方便在大型项目中统一管理日志配置
    logger = logging.getLogger('app')
    # 2.设置日志打印级别
    logger.setLevel(level)
    # logging.DEBUG 调试级别
    # logging.INFO 信息级别
    # logging.WARNING 警告级别
    # logging.ERROR 错误级别
    # logging.CRITICAL 严重错误级别
    logger.propagate = False  # 防止重复输出

    if not logger.handlers:
        # 创建日志目录-通过os包的path.exists方法判断是否有这条路径，没有就创建
        log_dir = os.path.join(os.getcwd(), 'logs')
        if not os.path.exists(log_dir):
            os.makedirs(log_dir)
        # 3.1创建 输出到控制台 处理器对象
        ch = logging.StreamHandler()
        ch.setLevel(logging.WARNING) # 设置控制台处理器的log等级
        # 3.2创建 输出到日志文件 处理器对象
        log_path = os.path.join(log_dir, f"{filename}.log") # 存放日志文件的位置
        fh = logging.handlers.TimedRotatingFileHandler(log_path, when=when, interval=interval,
                                                       backupCount=backup_count, encoding='utf-8')
        # 4. 创建日志信息格式
        fmt = "%(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"
        formatter = logging.Formatter(fmt, datefmt="%Y-%m-%d %H:%M:%S")
        ch.setFormatter(formatter)
        # 5.1将日志信息格式设置给控制台处理器
        ch.setFormatter(formatter)
        # 5.2将日志信息格式设置给日志文件处理器
        fh.setFormatter(formatter)
        # 6.1给日志器对象添加控制台处理器
        logger.addHandler(ch)
        logger.addHandler(fh)
    return logger

if __name__ == '__main__':
    # 初始化日志
    logger= init_log_config(filename='a')
    # 打印输出日志信息
    logger.debug('我是一个调试级别的日志')